package com.hedl.practice.diyJava.io.study_serialize.practice;

import com.hedl.practice.diyJava.io.study_serialize.practice.tmp.Person;

import java.io.*;

public class WriteObjectAndReadObject {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ////创建一个ObjectOutputStream输出流
        try(ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("/Users/a101/idea/Hello.txt"))){
            //将对象序列化到文件s
            com.hedl.practice.diyJava.io.study_serialize.practice.tmp.Person p = new com.hedl.practice.diyJava.io.study_serialize.practice.tmp.Person("小明",20);
            output.writeObject(p);
        }

        //反序列化
        /**
         * 报错原因：https://phind.com
         *  如果您在尝试将反序列化对象转换为特定类时获得ClassCastException，这可能是因为序列化期间使用的类名与反序列化期间使用的类名不同。
         *  当Java序列化对象时，它会在序列化数据中包含类名。当对象反序列化时，Java会尝试加载具有相同名称的类。
         *  如果序列化过程中使用的类名与反序列化中使用的类名不同，则可能会发生ClassCastException。
         * 为了避免这个问题，请确保序列化过程中使用的类名与反序列化期间使用的类名相同。如果您无法更改反序列化类中的类名，那么您可以使用readObject()方法手动反序列化对象。
         */
        //确保序列化过程中使用的类名与反序列化期间使用的类名相同
        try(ObjectInputStream input = new ObjectInputStream(new FileInputStream("/Users/a101/idea/Hello.txt"))){
            Object obj = input.readObject();
            if (obj instanceof Person){
                //Persons p = (Persons) obj;
                Person p = (Person) obj;
                System.out.println(p);
            }
        }
    }
}
